Verifying Array Manipulating Programs by Tiling
نویسندگان
چکیده
Formally verifying properties of programs that manipulate arrays in loops is computationally challenging. In this paper, we focus on a useful class of such programs, and present a novel property-driven verification method that first infers array access patterns in loops using simple heuristics, and then uses this information to compositionally prove universally quantified assertions about arrays. Specifically, we identify tiles of array accesses patterns in a loop, and use the tiling information to reduce the problem of checking a quantified assertion at the end of a loop to an inductive argument that checks only a slice of the assertion for a single iteration of the loop body. We show that this method can be extended to programs with sequentially composed loops and nested loops as well. We have implemented our method in a tool called Tiler. Initial experiments show that Tiler outperforms several state-of-the-art tools on a suite of interesting benchmarks.
منابع مشابه
A Verifier for Functional Properties of Sequence-Manipulating Programs
Many programs operate on data structures whose models are sequences, such as arrays, lists, and queues. When specifying and verifying functional properties of such programs, it is convenient to use an assertion language and a reasoning engine that incorporate sequences natively. This paper presents qfis, a program verifier geared to sequence-manipulating programs. qfis is a command-line tool th...
متن کاملAnalyzing Array Manipulating Programs by Program Transformation
We explore a transformational approach to the problem of verifying simple array-manipulating programs. Traditionally, verification of such programs requires intricate analysis machinery to reason with universally quantified statements about symbolic array segments, such as “every data item stored in the segment A[i] to A[j] is equal to the corresponding item stored in the segment B[i] to B[j].”...
متن کاملCounterexample-Guided Precondition Inference
The precondition for an assertion within a procedure is useful for understanding, verifying and debugging programs. As the procedure might be used in multiple calling-contexts within the program, the precondition should be sufficiently precise to enable re-use. We present an extension of counterexample-guided abstraction refinement (CEGAR) for automated precondition inference. Starting with an ...
متن کاملArray Abstractions from Proofs
We present a technique for using infeasible program paths to automatically infer Range Predicates that describe properties of unbounded array segments. First, we build proofs showing the infeasibility of the paths, using axioms that precisely encode the high-level (but informal) rules with which programmers reason about arrays. Next, we mine the proofs for Craig Interpolants which correspond to...
متن کاملScaling Bounded Model Checking by Transforming Programs with Arrays
Model checkers often face a state space explosion while verifying properties in programs with loops iterating over arrays. We present an abstraction which helps BMCs scale up and verify properties on arrays. Our technique transforms an array-manipulating C program to an array-free and loop-free program. The transformed program can then be verified by any bounded model checker without running in...
متن کامل